//* Include Files
#ifndef TLedH
#define TLedH
#include "OWLComps.hpp"
#include "OWPins.hpp"
#include "TBauelementGUI.h"

class TBauelementGUI;

/** Klasse realisiert LED.
 *
 * @brief Fachklasse: Led
 *
 * @author Sebastian Mueller
 * @date 20.05.2012
 *
 * @version 0.2
 * Destruktor hinzugefuegt
 *
 * @version 0.1
 * Doxygen Kommentare hinzugefuegt
 */
class TLed : public TBauelement{

private:
	//* Variablendeklaration
	TBauelementGUI* guiElement;
	TOWBoolSinkPin* inputPin;

public:

	/** Konstruktor von TLed
	* Initialisiert die benoetigten Pins und Variablen
	* @param[in] owner Gibt den Besitzer/Parent des Gatters an
	*/
	__fastcall TLed(TComponent* owner);
	/** Destruktor von TLed
	* \n Free'd den benutzten InputPin
	*/
	__fastcall ~TLed();

	/** Setzt die zugehoerige GUI-Komponente des Gatters
	* @param[in] guiElement zugehoeriges GUI-Element
	*/
	void __fastcall setGuiComponent(TBauelementGUI* guiElement);

	/** Versucht die uebergebenen Pins zu verbinden.
	* @param[in] pin Pin der Klasse, welcher verbunden werden soll
	* @param[in] pinToConnectTo Pin zu dem die Verbindung aufgebaut werden soll
	* @return Erfolg: true \n
	*		  Misserfolg: false
	*/
	bool __fastcall connect(Pin pin, TOWBasicPin* pinToConnectTo);

	/** Trennt uebergebenen Pin mit allen mit ihm verbundenen Pins
	* @param[in] pin Pin welcher getrennt werden soll
	*/
	void __fastcall disconnect(Pin pin);

	/** Gibt den gewuenschten Pin zurueck.
	* @param[in] pin Bestimmt welcher Pin zurueckgegeben werden soll
	* @return Erfolg: Referenz auf angeforderten Pin
	* \n Misserfolg: NULL
	*/
	TOWBasicPin* __fastcall getPin(Pin pin);

	/** Callback-Funktion fuer die Pins.
	* \n Wird aufgerufen sobald sich ein Wert einesInputPins aendert.
	*
	* @param[in] Sender Welcher Pin einen neuen Wert hat
	* @param[in] value Neuer Wert des Pins
	* @param[in] onConnect Zeigt ob der Pin neu verbunden wurde
	*/
	void __fastcall berechne(TOWPin* Sender, bool value, bool onConnect);

	/** Callback-Funktion fuer die Pins.
	* \n Wird allerdings nie aufgerufen
	* @param[in] dataTypeID Keine Angaben
	* @param[in] operation Keine Angaben
	* @param[in] state Keine Angaben
	* @param[in] x Keine Angaben
	* @return Keine Angaben
	*/
	TOWNotifyResult __fastcall pinDispatched(PDataTypeID dataTypeID, _di_IOWNotifyOperation operation, TOWNotifyState state, bool& x);
};

#endif

